package com.bustle.product.dto.product;

import java.util.List;
import java.util.Vector;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.xml.bind.annotation.XmlRootElement;

@Path("/product/")
@Produces(
  {
    MediaType.APPLICATION_JSON
  })
@Stateless
public class ProductDtoDaoWebService
{
  @POST
  @Path("/create")
  public ProductDto create(ProductDto aProductDto)
  {
    productDtoDao.create(aProductDto);
    return aProductDto;
  }

  @GET
  @Path("/retrieve")
  public ProductDto retrieve(@QueryParam("key") Integer aKey)
  {
    return productDtoDao.retrieve(aKey);
  }

  @GET
  @Path("/retrieveAll")
  public ProductDtoList retrieveAll()
  {
    ProductDtoList all = new ProductDtoList();
    all.setProduct(productDtoDao.retrieveAll());
    return all;
  }

  @PUT
  @Path("/update")
  public Response update(ProductDto aProductDto)
  {
    productDtoDao.update(aProductDto);
    return Response.status(Status.OK).build();
  }

  @DELETE
  @Path("/delete/{id}")
  public Response delete(@PathParam("id") Integer aKey)
  {
    productDtoDao.delete(aKey);
    return Response.status(Status.OK).build();
  }

  @EJB
  protected ProductDtoDao productDtoDao;

  @XmlRootElement(name = "products")
  static public class ProductDtoList
  {
    public List<ProductDto> getProduct()
    {
      return product;
    }

    public void setProduct(List<ProductDto> aList)
    {
      product = aList;
    }

    protected List<ProductDto> product = new Vector<>();
  }
}
